package leetcode;

import stack.Stack;

import javax.print.DocFlavor;
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;

/**
 * @author niann
 * @description 345. 反转字符串中的元音字母
 * //TODO https://leetcode.cn/problems/reverse-vowels-of-a-string/description/
 * @since 2024/10/28 12:05
 **/
public class    LeetCode345 {
    class Solution {
        public String reverseVowels(String s) {
            int l = 0; // 左指针
            int r = s.length() - 1; // 右指针
            // 将字符串 s 改成数组，方便交换字符
            char[] chars = s.toCharArray();
            // 所有元音字母，hash set 形式
            Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));

            while (l < r) {
                // 从左向右找元音字母
                while (l < s.length() && !vowels.contains(chars[l]))
                    l++;
                // 从右向左找元音字母
                while (r >= 0 && !vowels.contains(chars[r]))
                    r--;

                // 双指针相遇，退出
                if (l >= r) break;

                // 交换
                char temp = chars[l];
                chars[l++] = chars[r];
                chars[r--] = temp;
            }

            return new String(chars);
        }
    }
}
